%-------------------------------------------------------------------------------

% This file is part of code_saturne, a general-purpose CFD tool.
%
% Copyright (C) 1998-2025 EDF S.A.
%
% This program is free software; you can redistribute it and/or modify it under
% the terms of the GNU General Public License as published by the Free Software
% Foundation; either version 2 of the License, or (at your option) any later
% version.
%
% This program is distributed in the hope that it will be useful, but WITHOUT
% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
% FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
% details.
%
% You should have received a copy of the GNU General Public License along with
% this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
% Street, Fifth Floor, Boston, MA 02110-1301, USA.

%-------------------------------------------------------------------------------

\programme{cs\_face\_diffusion\_potential/cs\_diffusion\_potential}

\hypertarget{cs\_face\_diffusion\_potential}{}

\vspace{1cm}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section*{Discrétisation}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

La figure \ref{Base_Itrmas_fig_geom} rappelle les diverses définitions géométriques
pour les faces internes et les faces de bord.

\begin{figure}[h]
\parbox{8cm}{%
\centerline{\includegraphics[height=4cm]{facette}}}
\parbox{8cm}{%
\centerline{\includegraphics[height=4cm]{facebord}}}
\caption{\label{Base_Itrmas_fig_geom}Définition des différentes entités
géométriques pour les faces internes (gauche) et de bord (droite).}
\end{figure}


\subsection*{Calcul sans reconstruction des non orthogonalités}
Pour les faces internes, on écrit simplement :
\begin{equation}
\label{Base_Itrmas_eq_intssrec}
-\Delta t_{\,ij}(\grad_f P)_{\,ij}\,.\,\vect{S}_{\,ij}=
\frac{\Delta t_{\,ij}S_{\,ij}}{\overline{I^\prime J^\prime}}(P_I-P_J)
\end{equation}

Pour les faces de bord, on écrit :
\begin{equation}
\label{Base_Itrmas_eq_brdssrec}
-\Delta t_{b_{ik}}(\grad_f P)_{\,b_{ik}}\,.\,\vect{S}_{\,b_{ik}}=
\frac{\Delta t_{\,b_{ik}}S_{\,b_{ik}}}{\overline{I^\prime F}}
\left((1-B_{b,ik})P_I-\var{INC}\times A_{b,ik}\right)
\end{equation}

Les pas de temps aux faces $\Delta t_{\,ij}$ et $\Delta t_{\,b_{ik}}$ sont calculés
par interpolation par les sous-programmes \fort{cs\_face\_viscosity} (cas isotrope,
\var{IPUCOU=0}) ou \fort{cs\_face\_orthotropic\_viscosity\_vector} (cas anisotrope, \var{IPUCOU=1}).

\subsection*{Calcul avec reconstruction des non orthogonalités}
Plusieurs discrétisations peuvent être proposées pour le traitement des
non orthogonalités. Celle retenue dans le code est issue des premiers tests
réalisés sur le prototype, et fait intervenir non seulement le pas de temps
interpolé à la face, mais aussi les pas de temps dans chaque
cellule. Il
serait sans doute bon de revenir sur cette écriture et évaluer d'autres
solutions. La forme utilisée pour les faces internes est~:
\begin{multline}
\label{Base_Itrmas_eq_intavcrec}
-\Delta t_{\,ij}(\grad_f P)_{\,ij}\,.\,\vect{S}_{\,ij}=
\frac{\Delta t_{\,ij}S_{\,ij}}{\overline{I^\prime J^\prime}}(P_I-P_J)\\
+(\vect{II}^\prime-\vect{JJ}^\prime).\frac{1}{2}\left[
\Delta t_I(\grad P)_I+\Delta t_J(\grad P)_J\right]
\frac{S_{\,ij}}{\overline{I^\prime J^\prime}}
\end{multline}

Pour les faces de bord, on écrit :
\begin{equation}
\label{Base_Itrmas_eq_brdavcrec}
-\Delta t_{\,b_{ik}}(\grad_f P)_{\,b_{ik}}\,.\,\vect{S}_{\,b_{ik}}=
\frac{\Delta t_{\,b_{ik}} S_{\,b_{ik}}}{\overline{I^\prime F}}
\left[(1-B_{b,ik})(P_I+\vect{II}^\prime.(\grad P)_I)-\var{INC}\times A_{b,ik}\right]
\end{equation}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section*{Mise en \oe uvre}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Les principaux arguments passés à \fort{cs\_face\_diffusion\_potential} et \fort{cs\_diffusion\_potential} sont la
variable traitée \var{PVAR} (la pression), ses conditions aux limites, le pas
de temps projeté aux faces\footnote{%
Plus précisément, le pas de temps projeté aux faces, multiplié par la
surface et divisé par $\overline{I^\prime J^\prime}$ ou $\overline{I^\prime F}$, cf. \fort{cs\_face\_viscosity}}
(\var{VISCF} et \var{VISCB}), le pas de temps au
centre des cellules, éventuellement anisotrope (\var{VISELX}, \var{VISELY},
\var{VISELZ}). \fort{cs\_face\_diffusion\_potential} retourne les tableaux \var{FLUMAS} et \var{FLUMAB}
(flux de masse aux faces) mis à jour. \fort{cs\_diffusion\_potential} retourne directement la
divergence du flux de masse mis à jour, dans le tableau \var{DIVERG}.

\etape{Initialisation}
Si \var{INIT} vaut 1, les variables \var{FLUMAS} et \var{FLUMAB} ou \var{DIVERG}
sont mises à zéro.

\etape{Cas sans reconstruction}
La prise en compte ou non des non orthogonalités est déterminée par
l'indicateur \var{NSWRGR} de la variable traitée (nombre de sweeps de
reconstruction des non orthogonalités dans le calcul des gradients), passé
par la variable \var{NSWRGP}. Une valeur inférieure ou égale à 1 enclenche
le traitement sans reconstruction.\\
Des boucles sur les faces internes et les faces de bord utilisent directement
les formules (\ref{Base_Itrmas_eq_intssrec}) et (\ref{Base_Itrmas_eq_brdssrec}) pour remplir les
tableaux \var{FLUMAS} et \var{FLUMAB} (\fort{cs\_face\_diffusion\_potential}) ou des variables de
travail \var{FLUMAS} et \var{FLUMAB} qui servent à mettre à jour le tableau
\var{DIVERG} (\fort{cs\_diffusion\_potential}).

à noter que les tableaux \var{VISCF} et \var{VISCB} contiennent respectivement
$\displaystyle\frac{\Delta t_{\,ij}S_{\,ij}}{\overline{I^\prime J^\prime}}$ et
$\displaystyle\frac{\Delta t_{\,b_{ik}}S_{\,b_{ik}}}{\overline{I^\prime F}}$.

\etape{Cas avec reconstruction}
Après un appel à \fort{GRDCEL} pour calculer le gradient cellule de
pression, on remplit les tableaux \var{FLUMAS} et \var{FLUMAB} ou \var{DIVERG}
là encore par une application directe des formules (\ref{Base_Itrmas_eq_intavcrec}) et
(\ref{Base_Itrmas_eq_brdavcrec}).

